using System;
using System.Collections.Generic;
using System.Text;
using xWinFormsLib;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using pds2.XArena;

namespace QuizArena
{
    class TemasForm : Form
    {
        private Label lblNomeTema;
        private Textbox txtNomeTema;
        private TextButton btnAdicionar;
        private TextButton btnConfirmar;
        private TextButton btnCancelar;
        private TextButton btnRemover;
        private TextButton btnAlterar;
        private List<Tema> temas;
        private List<Pergunta> perguntas;
        private List<Assunto> assuntos;
        private Listbox ltbTemas;

        private void CarregarXml()
        {
            temas = XMLUtils.ObterLista<Tema>();

            foreach (Tema tema in temas)
            {
                ltbTemas.AddItem(tema.Nome);
            }
            Add(ltbTemas);

        }

        public TemasForm(Tela telaPai)
            : base(
            new Vector2(230, 150),
            //new Vector2(225, 135),
            //FormUtils.obterPosicaoForm(FormUtils.TamanhoForm.Grande),
            FormUtils.obterTamanhoForm(FormUtils.TamanhoForm.Grande),
            "Temas",
            Color.PowderBlue,
            Color.DarkBlue,
            ConteinerAuxiliar.fontePadrao,
            1f,
            false,
            false,
            false,
            false,
            BorderStyle.None,
            Style.Default, null, telaPai)
        {
            lblNomeTema = new Label("lblNomeTema", new Vector2(40, 40), "Tema", Label.Alignment.Center, null, Color.DarkBlue, font);
            Add(lblNomeTema);

            txtNomeTema = new Textbox("tbxNomeTema", new Vector2(40, 60), 120, null, "", "", 255, false, false, font, Style.Default);
            Add(txtNomeTema);

            btnAdicionar = new TextButton("btnAdicionar", new Vector2(280, 90), "Adicionar", 80, Color.White, font, Form.Style.Default);
            btnAdicionar.OnPress += new EventHandler(btnAdicionar_OnPress);
            Add(btnAdicionar);

            btnRemover = new TextButton("btnRemover", new Vector2(280, 130), "Remover", 80, Color.White, font, Form.Style.Default);
            btnRemover.OnPress += new EventHandler(btnRemover_OnPress);
            Add(btnRemover);

            btnAlterar = new TextButton("btnAlterar", new Vector2(280, 170), "Alterar", 80, Color.White, font, Form.Style.Default);
            btnAlterar.OnPress += new EventHandler(btnAlterar_OnPress);
            Add(btnAlterar);

            btnConfirmar = new TextButton("btnConfirmar", new Vector2(150, 280), "OK", null, Color.White, font, Form.Style.Default);
            btnConfirmar.OnPress += new EventHandler(btnConfirmar_OnPress);
            Add(btnConfirmar);

            btnCancelar = new TextButton("btnCancelar", new Vector2(230, 280), "Cancelar", null, Color.White, font, Form.Style.Default);
            btnCancelar.OnPress += new EventHandler(btnCancelar_OnPress);
            Add(btnCancelar);

            ltbTemas = new Listbox("ltbTemas", new Vector2(40, 90), new Point(100,180), Color.Beige, Color.White, font);
            ltbTemas.OnChangeSelection += new EventHandler(ltbTemas_OnChangeSelection);
            
            CarregarXml();
        }

        void btnAdicionar_OnPress(object obj, EventArgs e)
        {
            if (!txtNomeTema.Text.Trim().Equals(String.Empty))
            {
                Tema umTema = new Tema();
                umTema.Nome = txtNomeTema.Text;
                temas.Add(umTema);
                
                XMLUtils.SalvarLista<Tema>(temas);

                txtNomeTema.Text = String.Empty;
                ltbTemas.Clear();

                foreach (Tema tema in temas)
                {
                    ltbTemas.AddItem(tema.Nome);
                } 
            }
        }

        void btnRemover_OnPress(object obj, EventArgs e)
        {
            Tema umTema = new Tema();
            umTema.Nome = txtNomeTema.Text;

            perguntas = XMLUtils.ObterLista<Pergunta>();
            assuntos = XMLUtils.ObterLista<Assunto>();
            
            int countPergunta = perguntas.Count - 1;
            for (int i = countPergunta; i >= 0; i--)
            {
                if (perguntas[i].Tema.Nome.Equals(umTema.Nome))
                {
                    perguntas.RemoveAt(i);
                }
            }

            int countAssunto = assuntos.Count - 1;
            for (int i = countAssunto; i >= 0; i--)
            {
                if (assuntos[i].Tema.Nome.Equals(umTema.Nome))
                {
                    assuntos.RemoveAt(i);
                }
            }

            temas.RemoveAt(ltbTemas.IndexOf(ltbTemas.SelectedItem));
            txtNomeTema.Text = String.Empty;
            ltbTemas.RemoveItem(umTema.Nome);

            XMLUtils.SalvarLista<Assunto>(assuntos);
            XMLUtils.SalvarLista<Pergunta>(perguntas);
            XMLUtils.SalvarLista<Tema>(temas);
        }

        void btnAlterar_OnPress(object obj, EventArgs e)
        {
            if (!txtNomeTema.Text.Trim().Equals(String.Empty) && !ltbTemas.selectedItem.Equals(String.Empty))
            {
                Tema umTema = temas.Find(new Predicate<Tema>(IsTemaSelecionado));
                int countTema = temas.Count - 1;
                for (int i = countTema; i >= 0; i--)
                {
                    if (temas[i].Nome.Equals(umTema.Nome))
                    {
                        assuntos = XMLUtils.ObterLista<Assunto>();
                        foreach (Assunto assunto in assuntos)
                        {
                            if (assunto.Tema.Nome.Equals(umTema.Nome))
                            {
                                assunto.Tema.Nome = txtNomeTema.Text;
                            }
                        }
                        temas.RemoveAt(i);
                        umTema.Nome = txtNomeTema.Text;
                        temas.Insert(i, umTema);
                    }
                }

                XMLUtils.SalvarLista<Tema>(temas);
                XMLUtils.SalvarLista<Assunto>(assuntos);

                ltbTemas.Clear();
                txtNomeTema.Text = String.Empty;
                foreach (Tema tema in temas)
                {
                    ltbTemas.AddItem(tema.Nome);
                } 
            }
        }

        void btnCancelar_OnPress(object obj, EventArgs e)
        {
            Hide();
            telaPai.SairDaTela();
        }

        void btnConfirmar_OnPress(object obj, EventArgs e)
        {
            Hide();
            telaPai.SairDaTela();
        }

        void ltbTemas_OnChangeSelection(object obj, EventArgs e)
        {
            if (!ltbTemas.SelectedItem.Equals(String.Empty))
            {
                txtNomeTema.Text = ltbTemas.SelectedItem;
            }
        }

        private bool IsTemaSelecionado(Tema tema)
        {
            return tema.Nome.Equals(ltbTemas.SelectedItem);
        }
   }
}
